home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume17 / remind / part04 < prev    next >
Encoding:
Internet Message Format  |  1991-02-19  |  19.3 KB

  1. From: dfs@doe.carleton.ca (David F. Skoll)
  2. Newsgroups: comp.sources.misc
  3. Subject: v17i006:  remind - A replacement for calendar, Part04/04
  4. Message-ID: <1991Feb19.162851.16317@sparky.IMD.Sterling.COM>
  5. Date: 19 Feb 91 16:28:51 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: f5a0dcf5 7a857257 cc415cbf 395f270d
  8.  
  9. Submitted-by: David F. Skoll <dfs@doe.carleton.ca>
  10. Posting-number: Volume 17, Issue 6
  11. Archive-name: remind/part04
  12.  
  13. #! /bin/sh
  14. # This is a shell archive.  Remove anything before this line, then feed it
  15. # into a shell via "sh file" or similar.  To overwrite existing files,
  16. # type "sh file -c".
  17. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  18. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  19. # If this archive is complete, you will see the following message at the end:
  20. #        "End of archive 4 (of 4)."
  21. # Contents:  COPYRIGHT Makefile WHATSNEW.23 cache.h defines.h kall
  22. #   protos.h remind-all.csh remind-all.sh remind.mak
  23. # Wrapped by kent@sparky on Tue Feb 19 10:16:41 1991
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -f 'COPYRIGHT' -a "${1}" != "-c" ; then 
  26.   echo shar: Will not clobber existing file \"'COPYRIGHT'\"
  27. else
  28. echo shar: Extracting \"'COPYRIGHT'\" \(997 characters\)
  29. sed "s/^X//" >'COPYRIGHT' <<'END_OF_FILE'
  30. XTHE REMIND COPYRIGHT
  31. X
  32. XREMIND refers to the entire set of files and documentation in the
  33. XREMIND package.
  34. X
  35. XREMIND is Copyright (C) 1990, 1991 by David Skoll, except for the file
  36. Xremind-all.sh, which is Copyright (C) 1990 by Bill Aten.
  37. X
  38. XYou may use REMIND for free, and may freely distribute it, providing
  39. Xyou do not charge the recipients to whom you distribute REMIND.
  40. X
  41. XYou may modify REMIND.  However, you must clearly indicate such
  42. Xmodifications when you distribute REMIND, and must tell the
  43. Xrecipients of the modified version that it is modified.  Place that
  44. Xnotice in the WHATSNEW.xx file.
  45. X
  46. XYou may incorporate parts of REMIND into your own programs, providing
  47. Xyou do not sell these programs.  You must clearly indicate that the parts
  48. Xof REMIND you have incorporated are Copyright (C) 1990 by David Skoll.
  49. X
  50. XI will attempt to support REMIND as much as possible.  However, you use
  51. Xit at your own risk.  I am not responsible for any damages caused by
  52. Xthe use or misuse of REMIND.
  53. X--
  54. XDavid F. Skoll
  55. END_OF_FILE
  56. if test 997 -ne `wc -c <'COPYRIGHT'`; then
  57.     echo shar: \"'COPYRIGHT'\" unpacked with wrong size!
  58. fi
  59. # end of 'COPYRIGHT'
  60. fi
  61. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  62.   echo shar: Will not clobber existing file \"'Makefile'\"
  63. else
  64. echo shar: Extracting \"'Makefile'\" \(1339 characters\)
  65. sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  66. X# Makefile for REMIND - simple file
  67. X
  68. X#--------------- BEGINNING OF THINGS YOU CAN CHANGE --------------
  69. X
  70. X#If you have a BSD system:
  71. XCFLAGS= -O -DUNIX
  72. X
  73. X#If you have a SYSV system, comment previous line and uncomment next line:
  74. X#CFLAGS= -O -DUNIX -DSYSV
  75. X
  76. X#If your system does not include <malloc.h>, uncomment next line:
  77. X#CFLAGS += -DNO_MALLOC_H
  78. X
  79. X#If you have a SYSV system which does not implement the pid_t type,
  80. X#uncomment the next line:
  81. X#CFLAGS += -Dpid_t=int
  82. X
  83. X#If you want to use gcc:
  84. X#CC= gcc
  85. X
  86. X#Where do you want it installed?
  87. XBINDIR= /usr/local/bin
  88. XKALLDIR= /usr/share/bin
  89. XMANDIR= /usr/share/man
  90. XMANSECTION= 1
  91. X
  92. X#What program does the installation?
  93. XINSTALL= install
  94. X#INSTALL= cp
  95. X
  96. X#--------------- SHOULDN'T CHANGE STUFF BELOW HERE ---------------
  97. X
  98. Xall: dorem.o files.o main.o nextdate.o init.o dosubst.o timed.o calendar.o cache.o omits.o
  99. X    $(CC) -o remind dorem.o files.o main.o nextdate.o init.o dosubst.o timed.o calendar.o cache.o omits.o
  100. X
  101. Xdorem.o: dorem.c
  102. X
  103. Xfiles.o: files.c
  104. X
  105. Xmain.o:  main.c
  106. X
  107. Xomits.o: omits.c
  108. X
  109. Xnextdate.o: nextdate.c
  110. X
  111. Xinit.o: init.c
  112. X
  113. Xdosubst.o: dosubst.c
  114. X
  115. Xtimed.o: timed.c
  116. X
  117. Xcalendar.o: calendar.c
  118. X
  119. Xcache.o: cache.c
  120. X
  121. Xclean:
  122. X    rm -f *.o core *~ remind
  123. X
  124. Xinstall:
  125. X    $(INSTALL) remind $(BINDIR)
  126. X
  127. Xinstall.man:
  128. X    $(INSTALL) remind.1 $(MANDIR)/man$(MANSECTION)/remind.$(MANSECTION)
  129. X
  130. Xinstall.kall:
  131. X    $(INSTALL) kall $(KALLDIR)
  132. X
  133. END_OF_FILE
  134. if test 1339 -ne `wc -c <'Makefile'`; then
  135.     echo shar: \"'Makefile'\" unpacked with wrong size!
  136. fi
  137. # end of 'Makefile'
  138. fi
  139. if test -f 'WHATSNEW.23' -a "${1}" != "-c" ; then 
  140.   echo shar: Will not clobber existing file \"'WHATSNEW.23'\"
  141. else
  142. echo shar: Extracting \"'WHATSNEW.23'\" \(1388 characters\)
  143. sed "s/^X//" >'WHATSNEW.23' <<'END_OF_FILE'
  144. XA BRIEF HISTORY OF REMIND:
  145. X
  146. XVersion 1.0 - never publicly released.
  147. X
  148. XVersion 2.0 - first public release.  Included advanced date specifications,
  149. Xcharacter substitution, and the RUN keyword.
  150. X
  151. XVersion 2.1 - Added the "repeat" token for repeating reminders with a period
  152. Xother than 7 days.  Also fixed some bugs from version 2.0
  153. X
  154. XVersion 2.2 - Added the AT keyword, the timed reminders daemon, and the
  155. Xcalendar facility.
  156. X
  157. XVersion 2.2 - Patch 3  - Added the MSG or RUN tokens in an OMIT command; also
  158. Xallowed RUN-type reminders to be explicitly included in the calendar by
  159. Xusing the %" escape sequence.
  160. X
  161. XVersion 2.2 - Patch 5 - Added the BEFORE, AFTER and SKIP tokens to make the
  162. Xhandling of holidays more sensible.  Also corrected a few more bugs.
  163. X
  164. XVersion 2.3 - Added the UNTIL keyword for forcing reminders to expire.
  165. X
  166. XAdded the "++" form of 'back' and the "--" form of 'delta' for
  167. Xignoring OMIT information.
  168. X
  169. XAdded the CLEAR-OMIT-CONTEXT, PUSH-OMIT-CONTEXT and POP-OMIT-CONTEXT
  170. Xkeywords for isolating personal or peculiar reminders from the global
  171. XOMIT context.
  172. X
  173. XSpeeded up the parsing of tokens.
  174. X
  175. XChanged the source to recognize and exploit ANSI-C compilers which
  176. Xaccept function prototypes.
  177. X
  178. XAdded the "-n" option to output the next occurrence of each reminder
  179. Xin SimpleCalendar format
  180. X
  181. XModified the calendar and SimpleCalendar formats so that the % escape
  182. Xsubstitutions ARE performed.
  183. X
  184. END_OF_FILE
  185. if test 1388 -ne `wc -c <'WHATSNEW.23'`; then
  186.     echo shar: \"'WHATSNEW.23'\" unpacked with wrong size!
  187. fi
  188. # end of 'WHATSNEW.23'
  189. fi
  190. if test -f 'cache.h' -a "${1}" != "-c" ; then 
  191.   echo shar: Will not clobber existing file \"'cache.h'\"
  192. else
  193. echo shar: Extracting \"'cache.h'\" \(785 characters\)
  194. sed "s/^X//" >'cache.h' <<'END_OF_FILE'
  195. X/***************************************************************/
  196. X/*                                                             */
  197. X/*  CACHE.H                                                    */
  198. X/*                                                             */
  199. X/*  Function prototypes, etc. for CACHE.C                      */
  200. X/*                                                             */
  201. X/*  By David Skoll - 15 November 1990                          */
  202. X/*                                                             */
  203. X/***************************************************************/
  204. X#ifdef __STDC__
  205. Xvoid InitCache(void);
  206. Xint GetLine(void);
  207. Xvoid ResetCache(void);
  208. Xvoid DestroyCache(void);
  209. X#else
  210. Xvoid InitCache();
  211. Xint GetLine();
  212. Xvoid ResetCache();
  213. Xvoid DestroyCache();
  214. X#endif
  215. END_OF_FILE
  216. if test 785 -ne `wc -c <'cache.h'`; then
  217.     echo shar: \"'cache.h'\" unpacked with wrong size!
  218. fi
  219. # end of 'cache.h'
  220. fi
  221. if test -f 'defines.h' -a "${1}" != "-c" ; then 
  222.   echo shar: Will not clobber existing file \"'defines.h'\"
  223. else
  224. echo shar: Extracting \"'defines.h'\" \(2313 characters\)
  225. sed "s/^X//" >'defines.h' <<'END_OF_FILE'
  226. X/***************************************************************/
  227. X/*                                                             */
  228. X/*  DEFINES.H                                                  */
  229. X/*                                                             */
  230. X/*  Contains macros and #defines for REMIND program.           */
  231. X/*                                                             */
  232. X/*  By David Skoll - 30 Sept 1990.                             */
  233. X/*                                                             */
  234. X/***************************************************************/
  235. X
  236. X/* User-definable variables.  BASE *must* be a year for which the
  237. X   first of January is a Monday!!!  FOMITSIZE and POMITSIZE control
  238. X   the number of fully-specified (dd-mm-yy) and partially-specified
  239. X   (dd-mm) holidays. */
  240. X#define BASE 1990
  241. X#define FOMITSIZE 150
  242. X#define POMITSIZE 75
  243. X
  244. X/* Useful macros */
  245. X
  246. X#define upper(c) ( ((c) >= 'a' && (c) <= 'z') ? ((c)-32) : (c) )
  247. X#define DaysInYear(y) (((y) % 4) ? 365 : ((!((y) % 100) && ((y) % 400)) ? 365 : 366 ))
  248. X#define IsLeapYear(y) (((y) % 4) ? 0 : ((!((y) % 100) && ((y) % 400)) ? 0 : 1 ))
  249. X#define DaysInMonth(m, y) ((m) != 1 ? MonthDays[m] : 28 + IsLeapYear(y))
  250. X#define TimeLess(h1, m1, h2, m2) (((h1) < (h2)) || (((h1) == (h2)) && ((m1) < (m2))))
  251. X#define MAX(x, y) ((x) < (y) ? (y) : (x))
  252. X#define MIN(x, y) ((x) < (y) ? (x) : (y))
  253. X#ifndef ABS
  254. X#define ABS(x) ((x) < 0 ? (-(x)) : (x))
  255. X#endif
  256. X
  257. X/* Bit masks for constraint map */
  258. X#define DAY_M 1
  259. X#define MONTH_M 2
  260. X#define YEAR_M 4
  261. X#define WKDAY_M 8
  262. X
  263. Xenum Token_t { Unknown_t, Year_t, Month_t, Day_t, WkDay_t, Msg_t, Run_t,
  264. X           Omit_t, Banner_t, Rem_t, Delta_t, Back_t, Once_t, Include_t,
  265. X               Repeat_t, At_t, Time_t, Skip_t, Until_t, Push_t, Pop_t,
  266. X           Clear_t, Eol_t };
  267. X
  268. X/* Define the Token structure */
  269. X
  270. Xtypedef struct {
  271. X   char *str;
  272. X   enum Token_t type;
  273. X   int val;
  274. X   char len;    /* Minimum length to match */
  275. X} Token;
  276. X
  277. X#ifdef UNIX
  278. X/* Define the structure of an AT entry */
  279. Xtypedef struct AtEntry_t{
  280. X   int time;      /* Time in minutes after midnight - 0 to 1439 */
  281. X   int firsttime; /* Time of first triggering */
  282. X   int repeat;    /* Repeat period */
  283. X   int delta;     /* Delta time */
  284. X   enum Token_t type;    /* Run_t or Msg_t */
  285. X   char *text;
  286. X   struct AtEntry_t *next;
  287. X} AtEntry;
  288. X#endif
  289. X
  290. END_OF_FILE
  291. if test 2313 -ne `wc -c <'defines.h'`; then
  292.     echo shar: \"'defines.h'\" unpacked with wrong size!
  293. fi
  294. # end of 'defines.h'
  295. fi
  296. if test -f 'kall' -a "${1}" != "-c" ; then 
  297.   echo shar: Will not clobber existing file \"'kall'\"
  298. else
  299. echo shar: Extracting \"'kall'\" \(852 characters\)
  300. sed "s/^X//" >'kall' <<'END_OF_FILE'
  301. X#!/bin/sh
  302. X#
  303. X# kall - kill all processes belonging to this user that match
  304. X#           specified string.
  305. X
  306. Xsignal=`echo $1 | grep '^\-.*'`
  307. Xme=`basename $0`
  308. X
  309. Xif [ "$signal" != "" ]; then
  310. X    shift
  311. Xelse
  312. X    signal="-TERM"
  313. Xfi
  314. X
  315. Xif [ "$1" = "" ]; then
  316. X    echo "usage: $me [-signal] string [string...]"
  317. X    echo "       kills all of your processes where command name matches"
  318. X    echo "       any of the given strings."
  319. X    exit
  320. Xfi
  321. X
  322. Xmsg="0"
  323. X
  324. Xwhile [ "$1" != "" ]; do
  325. X
  326. X# NOTE:  You may have to modify the next line, since PS is non-portable.
  327. X# The 'awk' command picks out the process IDs to pass them on to kill.
  328. X    rprocs=`ps -cx | awk '{if(prog == $5) print $1}' prog=$1 -`
  329. X    if [ "$rprocs" != "" ]; then
  330. X        msg="1"
  331. X        echo -n "${me}: Sending $signal signal to $1 process(es)"
  332. X        echo '...'
  333. X        kill $signal $rprocs
  334. X    fi
  335. X    shift
  336. Xdone
  337. X
  338. Xif [ $msg = "1" ]; then
  339. X    echo "${me}: Done."
  340. Xfi
  341. END_OF_FILE
  342. if test 852 -ne `wc -c <'kall'`; then
  343.     echo shar: \"'kall'\" unpacked with wrong size!
  344. fi
  345. chmod +x 'kall'
  346. # end of 'kall'
  347. fi
  348. if test -f 'protos.h' -a "${1}" != "-c" ; then 
  349.   echo shar: Will not clobber existing file \"'protos.h'\"
  350. else
  351. echo shar: Extracting \"'protos.h'\" \(2210 characters\)
  352. sed "s/^X//" >'protos.h' <<'END_OF_FILE'
  353. X
  354. X/* Function Prototypes go here */
  355. X
  356. X#ifdef __STDC__
  357. Xint   CheckDate   (int d,   int m,  int y);
  358. Xvoid  ClearOmitContext(void);
  359. Xvoid  CopyInts    (int *from, int *to, int count);
  360. Xint   DoBanner    (char **s);
  361. Xvoid  DoCalendar  (void);
  362. Xint   DoGlobalOmit(char **s);
  363. Xvoid  DoInclude   (char **s);
  364. Xint   DoRem       (char **s);
  365. Xint   DoSubst     (char *src, char *dst, int d, int m, int y, int jul, enum Token_t t, int tim, int mode);
  366. Xint   FindTodaysDate(int *d, int *m, int *y);
  367. Xvoid  FreeStackedOmits (void);
  368. Xint   FromJulian  (int jul, int *d, int *m, int *y);
  369. Xint   GetTriggerDate (int d, int m, int y, int wd, int cons, int back, int repeat, int omit, int skip);
  370. Xint   IsOmitted   (int jul, int localomit);
  371. Xvoid  HandleQueuedAts(void);
  372. Xvoid  initialize  (int argc, char *argv[]);
  373. Xint   int_comp    (int *, int *);
  374. Xint   Julian      (int d,   int m,  int y);
  375. Xint   MoveBack    (int jul, int back, int omit);
  376. Xint   *my_bsearch (int key, int *array, int number);
  377. Xvoid  OpenFile    (char *s);
  378. Xvoid  Output      (char *s);
  379. XToken ParseToken  (char **s);
  380. Xint   PopOmitContext (void);
  381. Xint   PushOmitContext (void);
  382. Xint   ProcessLine (void);
  383. Xint   ReadLine    (void);
  384. Xvoid  SigIntHandler (void);
  385. Xlong  SystemTime  (void);
  386. Xint   TopLevel    (void);
  387. Xint   TryNextDate(int *retday, int *retmon, int *retyr,
  388. X          int startday, int startmon, int startyr,
  389. X          int conday, int conmon, int conyr,
  390. X          int wkday, int cons, int inc);
  391. X#else
  392. Xint   CheckDate   ();
  393. Xvoid  ClearOmitContext();
  394. Xvoid  CopyInts    ();
  395. Xint   DoBanner    ();
  396. Xvoid  DoCalendar  ();
  397. Xint   DoGlobalOmit();
  398. Xvoid  DoInclude   ();
  399. Xint   DoRem       ();
  400. Xint   DoSubst     ();
  401. Xint   FindTodaysDate();
  402. Xvoid  FreeStackedOmits();
  403. Xint   FromJulian  ();
  404. Xint   GetTriggerDate();
  405. Xint   IsOmitted   ();
  406. Xvoid  HandleQueuedAts();
  407. Xvoid  initialize  ();
  408. Xint   int_comp    ();
  409. Xint   Julian      ();
  410. Xint   MoveBack    ();
  411. Xint  *my_bsearch  ();
  412. Xvoid  OpenFile    ();
  413. Xvoid  Output      ();
  414. XToken ParseToken  ();
  415. Xint   PopOmitContext ();
  416. Xint   ProcessLine ();
  417. Xint   PushOmitContext ();
  418. Xint   ReadLine    ();
  419. Xvoid  SigIntHandler();
  420. Xlong  SystemTime  ();
  421. Xint   TopLevel    ();
  422. Xint   TryNextDate ();
  423. X#endif
  424. X
  425. X#ifndef UNIX
  426. Xvoid  Eprint(const char *f, ...);
  427. X#else
  428. Xvoid  Eprint();
  429. X#endif
  430. END_OF_FILE
  431. if test 2210 -ne `wc -c <'protos.h'`; then
  432.     echo shar: \"'protos.h'\" unpacked with wrong size!
  433. fi
  434. # end of 'protos.h'
  435. fi
  436. if test -f 'remind-all.csh' -a "${1}" != "-c" ; then 
  437.   echo shar: Will not clobber existing file \"'remind-all.csh'\"
  438. else
  439. echo shar: Extracting \"'remind-all.csh'\" \(1568 characters\)
  440. sed "s/^X//" >'remind-all.csh' <<'END_OF_FILE'
  441. X#!/bin/csh -f
  442. X
  443. X# Shell script to mail all users reminders.
  444. X
  445. X# Run it AFTER MIDNIGHT so that date is correct!
  446. X# On our system, we have the following in our crontab:
  447. X# 05 5 * * * /usr/share/lib/remind/remind-all > /dev/null 2>&1
  448. X
  449. X# Also, you MUST use the -r and -q options on REMIND, otherwise SEVERE
  450. X# security hole could develop.  I recommend making this script
  451. X# readable and executable only by root to minimize security problems.
  452. X# DO NOT make the script setuid!
  453. X
  454. X# The following line gets a list of users for systems using SUN's
  455. X# NIS service:
  456. Xset USERS  = `ypcat passwd | awk -F: '{print $1}'`
  457. X
  458. X# The following line gets a list of users by examining /etc/passwd:
  459. X# set USERS = `awk -F: '{print $1}' /etc/passwd`
  460. X
  461. X# If neither of the above methods works, you must come up with some
  462. X# way of getting a list of users on the system
  463. X
  464. X# Set the following variables as appropriate for your system
  465. Xset REMIND = /usr/local/bin/remind
  466. Xset MAIL   = /usr/ucb/mail
  467. Xset CMP    = /usr/bin/cmp
  468. Xset RM     = "/usr/bin/rm -f"
  469. X
  470. Xset EMPTY  = /tmp/Empty.$$
  471. Xset FULL   = /tmp/Full.$$
  472. X
  473. X# Create the dummy empty reminder file
  474. X$REMIND -rq /dev/null > $EMPTY
  475. X
  476. X# Scan each user's directory for a .reminders file
  477. Xforeach i ($USERS)
  478. X   if (-r ~$i/.reminders) then
  479. X
  480. X#     echo "$i has a .reminders file."     DEBUGGING PURPOSES ONLY
  481. X
  482. X      $REMIND -rq ~$i/.reminders > $FULL
  483. X      $CMP -s $EMPTY $FULL
  484. X      if ($status != 0) then
  485. X
  486. X#        echo "Sending mail to $i"         DEBUGGING PURPOSES ONLY
  487. X
  488. X         $MAIL -s "Reminders" $i < $FULL
  489. X      endif
  490. X      $RM $FULL
  491. X   endif
  492. Xend
  493. X
  494. X$RM $EMPTY
  495. END_OF_FILE
  496. if test 1568 -ne `wc -c <'remind-all.csh'`; then
  497.     echo shar: \"'remind-all.csh'\" unpacked with wrong size!
  498. fi
  499. # end of 'remind-all.csh'
  500. fi
  501. if test -f 'remind-all.sh' -a "${1}" != "-c" ; then 
  502.   echo shar: Will not clobber existing file \"'remind-all.sh'\"
  503. else
  504. echo shar: Extracting \"'remind-all.sh'\" \(1589 characters\)
  505. sed "s/^X//" >'remind-all.sh' <<'END_OF_FILE'
  506. X# Shell script to mail all users reminders.
  507. X
  508. X# Thanks to Bill Aten for this script.
  509. X
  510. X# Run it AFTER MIDNIGHT so that date is correct!
  511. X# On our system, we have the following in our crontab:
  512. X# 02 00 * * * /usr/local/adm/remind-all >/dev/null 2>&1
  513. X
  514. X# Also, you MUST use the -r and -q options on REMIND, otherwise a SEVERE
  515. X# security hole could develop.  I recommend making this script
  516. X# readable and executable only by root to minimize security problems.
  517. X# DO NOT make the script setuid!
  518. X
  519. X# The following line gets a list of users for systems using SUN's
  520. X# NIS service:
  521. X# USERS=`ypcat passwd | awk -F: '{print $1}'`
  522. X
  523. X# The following line gets a list of users by examining /etc/passwd:
  524. XUSERS=`awk -F: '{print $1}' /etc/passwd`
  525. X
  526. X# If neither of the above methods works, you must come up with some
  527. X# way of getting a list of users on the system
  528. X
  529. X# Set the following variables as appropriate for your system
  530. XREMIND=/usr/local/bin/remind
  531. XMAIL=/usr/bin/mail
  532. XCMP=/bin/cmp
  533. XRM="/bin/rm -f"
  534. X
  535. XEMPTY=/tmp/Empty.$$
  536. XFULL=/tmp/Full.$$
  537. X
  538. X# Create the dummy empty reminder file
  539. X$REMIND -rq /dev/null > $EMPTY
  540. X
  541. X# Scan each user's directory for a .reminders file
  542. Xfor i in $USERS
  543. Xdo
  544. XHOME=`grep \^$i: /etc/passwd | awk -F: '{print $6}'`
  545. X   if [ -r $HOME/.reminders ]; then
  546. X
  547. X#     echo "$i has a .reminders file."     DEBUGGING PURPOSES ONLY
  548. X
  549. X      $REMIND -rq $HOME/.reminders > $FULL
  550. X      if `$CMP -s $EMPTY $FULL`; then
  551. X         : do nothing
  552. X      else
  553. X
  554. X#        echo "Sending mail to $i"         DEBUGGING PURPOSES ONLY
  555. X
  556. X         $MAIL -s "Reminders" $i < $FULL
  557. X      fi
  558. X      $RM $FULL
  559. X   fi
  560. Xdone
  561. X
  562. X$RM $EMPTY
  563. END_OF_FILE
  564. if test 1589 -ne `wc -c <'remind-all.sh'`; then
  565.     echo shar: \"'remind-all.sh'\" unpacked with wrong size!
  566. fi
  567. # end of 'remind-all.sh'
  568. fi
  569. if test -f 'remind.mak' -a "${1}" != "-c" ; then 
  570.   echo shar: Will not clobber existing file \"'remind.mak'\"
  571. else
  572. echo shar: Extracting \"'remind.mak'\" \(940 characters\)
  573. sed "s/^X//" >'remind.mak' <<'END_OF_FILE'
  574. X# Simple-minded MAKE file.
  575. X
  576. XHEADERS = globals.h protos.h defines.h
  577. XWARN = /W3
  578. Xmain.obj: main.c $(HEADERS)
  579. X   cl $(WARN) /AS /Fomain.obj /c main.c
  580. X
  581. Xomits.obj: omits.c $(HEADERS)
  582. X   cl $(WARN) /AS /Foomits.obj /c omits.c
  583. X
  584. Xnextdate.obj: nextdate.c $(HEADERS)
  585. X   cl $(WARN) /AS /Fonextdate.obj /c nextdate.c
  586. X
  587. Xdorem.obj: dorem.c $(HEADERS)
  588. X   cl $(WARN) /AS /Fodorem.obj /c dorem.c
  589. X
  590. Xinit.obj: init.c $(HEADERS)
  591. X   cl $(WARN) /AS /Foinit.obj /c init.c
  592. X
  593. Xdosubst.obj: dosubst.c
  594. X   cl $(WARN) /AS /Fodosubst.obj /c dosubst.c
  595. X
  596. Xfiles.obj: files.c
  597. X   cl $(WARN) /AS /Fofiles.obj /c files.c
  598. X
  599. Xcalendar.obj: calendar.c
  600. X   cl $(WARN) /AS /Focalendar.obj /c calendar.c
  601. X
  602. Xcache.obj: cache.c
  603. X   cl $(WARN) /AS /Focache.obj /c cache.c
  604. X
  605. Xremind.exe: main.obj nextdate.obj dorem.obj init.obj dosubst.obj files.obj calendar.obj cache.obj omits.obj
  606. X   cl /Feremind.exe main.obj nextdate.obj dorem.obj init.obj dosubst.obj files.obj calendar.obj cache.obj omits.obj
  607. X
  608. END_OF_FILE
  609. if test 940 -ne `wc -c <'remind.mak'`; then
  610.     echo shar: \"'remind.mak'\" unpacked with wrong size!
  611. fi
  612. # end of 'remind.mak'
  613. fi
  614. echo shar: End of archive 4 \(of 4\).
  615. cp /dev/null ark4isdone
  616. MISSING=""
  617. for I in 1 2 3 4 ; do
  618.     if test ! -f ark${I}isdone ; then
  619.     MISSING="${MISSING} ${I}"
  620.     fi
  621. done
  622. if test "${MISSING}" = "" ; then
  623.     echo You have unpacked all 4 archives.
  624.     rm -f ark[1-9]isdone
  625. else
  626.     echo You still need to unpack the following archives:
  627.     echo "        " ${MISSING}
  628. fi
  629. ##  End of shell archive.
  630. exit 0
  631. exit 0 # Just in case...
  632. -- 
  633. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  634. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  635. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  636. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  637.